#if !defined(__APP_DEVICE_H__)
#define __APP_DEVICE_H__

#include "../app/app_buffer.h"
#include <pthread.h>

//创建结构体（Device_9），用于存放设备信息
typedef struct{
    char *filename;  //1.设备文件，接收下游的数据（连接设备才有）
    int fd;          //2.文件描述符（连接设备才有）
    Buffer *up_buffer; //3.上行缓冲区（存储转成char数组类型串口数据）
    Buffer *down_buffer; //4.下行缓冲区（存储接转成char数组mqtt的数据）
    pthread_t read_thread; //5.读线程:不断读取串口数据的线程，与线程池无关
    int is_running;     //6.读线程是否正在运行 1运行0未
    long last_write_time; //7.最后一次写入时间,每次写入间隔200ms，通过sleep阻塞
    //8.收到设备原始数据 后 的处理函数指针=》char数组   (数据放在参数里，数据长度返回值)
    int (*after_read)(char *data,int len);
    //9.发送到设备 前 char数组的处理函数指针=》原始数据  (数据放在参数里，数据长度返回值)
    int (*pre_write)(char *data,int len);
}Device;

//初始化:创建线程池、缓冲区、初始化mqtt客户端
Device * app_device_init(char *filename);

//销毁:关闭文件描述符、销毁缓冲区、销毁线程池、销毁mqtt客户端
void app_device_destroy(Device *device);

//启动设备：防止多次调用、创建读线程（把设备数据转格式发到mqtt）、mqtt接收（把mqtt数据转为设备数据）
int app_device_start(Device *device);

#endif // __APP_DEVICE_H__
